package com.portal.framework.searchform;

import com.portal.framework.dao.ISearchForm;
import com.portal.framework.page.PagerResult;

/**
 * searchForm支持接口.定义一般SearchForm调用的方法
 * 
 * @author 卢烁波
 * @date 2007-3-10
 */
public interface ISearchFormSupport<C> {
	/**
	 * 根据searchForm进行搜索并根据传来的retClass进行转换并返回,转换是根据retClass的构造函数的个数进行匹配
	 * 
	 * @param <T>
	 * @param searchForm
	 * @param retClazz 返回的类型
	 * @return
	 */
	public <T> PagerResult<T> findBySearchFormAndCast(
			final ISearchForm searchForm, final Class<T> retClazz);

	/**
	 * 根据searchForm进行搜索并根据传来的retClass进行转换并返回,转换是根据retClass的构造函数的个数进行匹配
	 * 
	 * @param <T>
	 * @param searchClazz 搜索的类型
	 * @param searchForm 搜索条件
	 * @param retClazz 返回类型 用构造函数进行创建对象
	 * @return
	 */
	public <T> PagerResult<T> findBySearchFormAndCast(
			final Class<?> searchClazz, final ISearchForm searchForm,
			final Class<T> retClazz);

	/**
	 * @param <T> 返回的类型
	 * @param searchClass 搜索的类
	 * @param searchForm searchForm条件类
	 * @param retClazz 返回的类
	 * @return
	 */
	public <T> PagerResult<T> findBySearchForm(final Class<?> searchClass,
			final ISearchForm searchForm, final Class<T> retClazz);

	/**
	 * 根据searchForm进行搜索,返回和搜索的类型是接口传入的泛型
	 * 
	 * @param searchForm
	 * @return
	 */
	public PagerResult<C> findBySearchForm(final ISearchForm searchForm);

	/**
	 * @param <T> 返回的类型
	 * @param searchClass 进行搜索的类
	 * @param searchForm searchForm条件类 <BR>
	 *            等价于 findByCondition(searchClass,searchForm,searchClass);
	 * @return
	 */
	public <T> PagerResult<T> findBySearchForm(final Class<T> searchClass,
			final ISearchForm searchForm);
}
